perm filename PRD[BNF,JRA] blob
sn#001931 filedate 1972-10-06 generic text, type T, neo UTF8
(SETQ IBASE (ADD1 7))
(DEFPROP PRDFNS
(NIL !STKLOC
!TSTLST
!ASSLST
!X
!NR
!WORRYFLG
!BNF
!RULE
PRDEXP
OUTBLDINIT
RTLSTSIZE
PRODUCE
UNPRODUCE
BROKET
SQBROK
PRD
PBLD0
PBLD1
STKIFY
PBLD21
GETATOM
ASSOCL
SUBSTL
MKLIST
OUTORDER
ORDTST2
WORRY
TTYPRINT
TTYPRIN1
MKRITE
TST
VARIABLE
SPCS
CONSTLST
TST2
TST3
OTA
OT1
OT2
MKMATCH
MAGPRE
STKLST
MKBLD2
MKBLD
OUTMAK1
MKTST2
MKTST
MAKOUTRULE
OUTMAKE
MKOP)
VALUE)
(DEFPROP !STKLOC
T
SPECIAL)
(DEFPROP !TSTLST
T
SPECIAL)
(DEFPROP !ASSLST
T
SPECIAL)
(DEFPROP !X
T
SPECIAL)
(DEFPROP !NR
T
SPECIAL)
(DEFPROP !WORRYFLG
(NIL)
VALUE)
(DEFPROP !WORRYFLG
T
SPECIAL)
(DEFPROP !BNF
T
SPECIAL)
(DEFPROP !RULE
T
SPECIAL)
(DEFPROP PRDEXP
(NIL OUTORDER ORDTST2 WORRY OTA OT1 OT2)
VALUE)
(DEFPROP OUTBLDINIT
(LAMBDA NIL (PROG NIL (ARRAY ORDNAM T RTLSTSIZE) (ARRAY ORDNUM T RTLSTSIZE) (ARRAY ORDLST T RTLSTSIZE)))
EXPR)
(DEFPROP RTLSTSIZE
(NIL . 40)
VALUE)
(DEFPROP PRODUCE
(LAMBDA(L)
(PROG NIL
(SETQ <LANG>
(MAPCAR (FUNCTION
(LAMBDA(X)
(PROG (Y)
(SETQ Y (BROKET (CAR X)))
(PUTPROP (CAR X) (CADR X) (QUOTE BNF))
(PRD (CAR X))
(RETURN Y))))
L))
(SETQ >LANG<
(MAPCAR (FUNCTION (LAMBDA (X) (PROG (Y) (SETQ Y (SQBROK (CAR X))) (MAKOUTRULE X Y) (RETURN Y))))
L))))
EXPR)
(DEFPROP UNPRODUCE
(LAMBDA (L) (MAPCAR (FUNCTION (LAMBDA (X) (LIST X (GET X (QUOTE BNF))))) L))
EXPR)
(DEFPROP BROKET
(LAMBDA(X)
(PROG (L) (SETQ L (EXPLODE X)) (RPLACD (LAST L) (QUOTE (>))) (RETURN (READLIST (CONS (QUOTE <) L)))))
EXPR)
(DEFPROP SQBROK
(LAMBDA(X)
(PROG (L) (SETQ L (EXPLODE X)) (RPLACD (LAST L) (QUOTE (<))) (RETURN (READLIST (CONS (QUOTE >) L)))))
EXPR)
(DEFPROP PRD
(LAMBDA(X)
(PROG (NR R RL FS)
(SETQ RL (REVERSE (GET X (QUOTE BNF))))
L (COND
((NULL RL) (PUTPROP (BROKET X) (LIST (QUOTE LAMBDA) NIL (PBLD0 X NR R)) (QUOTE EXPR)) (RETURN X)))
(SETQ FS (CAAR RL))
L2 (COND ((NULL FS) (GO L3))
((EQ (CAR FS) X) (SETQ R (CONS (CAR RL) R)) (GO L4))
((EQ (CAAR FS) (QUOTE FORMAT)) (SETQ FS (CDR FS)) (GO L2)))
L3 (SETQ NR (CONS (CAR RL) NR))
L4 (SETQ RL (CDR RL))
(GO L)))
EXPR)
(DEFPROP PBLD0
(LAMBDA(LP RPSM LFRC)
(COND ((NOT LFRC)
(LIST (QUOTE NLRR)
(LIST (QUOTE QUOTE) LP)
(LIST (QUOTE FUNCTION) (LIST (QUOTE LAMBDA) NIL (PBLD1 T RPSM)))))
(T
(LIST (QUOTE LRR)
(LIST (QUOTE QUOTE) LP)
(LIST (QUOTE FUNCTION) (LIST (QUOTE LAMBDA) NIL (PBLD1 T RPSM)))
(LIST (QUOTE FUNCTION) (LIST (QUOTE LAMBDA) (QUOTE (<*>)) (PBLD1 NIL LFRC)))))))
EXPR)
(DEFPROP PBLD1
(LAMBDA(!NR RPSM)
(CONS (QUOTE COND)
(APPEND (MAPCAR (FUNCTION (LAMBDA (X) (PBLD21 (NOT !NR) (CAR X) (STKIFY (CADR X) (CAR X))))) RPSM)
(QUOTE ((*NIL*))))))
EXPR)
(DEFPROP STKIFY
(LAMBDA(X RTPT)
(COND ((NULL X) NIL)
((EQ X (QUOTE *)) (LIST (QUOTE STK) (GETATOM RTPT)))
((MEMBER X RTPT) (LIST (QUOTE STK) X))
((ATOM X) (LIST (QUOTE QUOTE) X))
(T (LIST (QUOTE CONS) (STKIFY (CAR X) RTPT) (STKIFY (CDR X) RTPT)))))
EXPR)
(DEFPROP PBLD21
(LAMBDA(LRR RTPT SEM)
(PROG (I NRP)
(SETQ I -1)
(SETQ RTPT (REVERSE RTPT))
L (COND ((NULL RTPT) (GO L2))
((EQ (CAAR RTPT) (QUOTE FORMAT)))
(T (SETQ I (ADD1 I))
(SETQ NRP (CONS (COND ((ATOM (CAR RTPT)) (NCONS (BROKET (CAR RTPT)))) (T (CAR RTPT))) NRP))
(COND ((ATOM (CAR RTPT)) (SETQ SEM (SUBST I (CAR RTPT) SEM))))))
(SETQ RTPT (CDR RTPT))
(GO L)
L2 (COND (LRR (SETQ SEM (SUBST (QUOTE <*>) (LIST (QUOTE STK) I) SEM)) (SETQ NRP (CDR NRP))))
(RETURN (LIST (CONS (QUOTE AND) NRP) SEM))))
EXPR)
(DEFPROP GETATOM
(LAMBDA (L) (COND ((ATOM (CAR L)) (CAR L)) (T (GETATOM (CDR L)))))
EXPR)
(DEFPROP ASSOCL
(LAMBDA (X L) (COND ((NULL L) NIL) ((EQUAL X (CAAR L)) (CAR L)) (T (ASSOCL X (CDR L)))))
EXPR)
(DEFPROP SUBSTL
(LAMBDA (L X) (COND ((NULL L) X) (T (SUBSTL (CDR L) (SUBST (CAAR L) (CADAR L) X)))))
EXPR)
(DEFPROP MKLIST
(LAMBDA (X) (COND ((NULL (CDR X)) (CAR X)) (T (CONS (QUOTE LIST) X))))
EXPR)
(DEFPROP OUTORDER
(LAMBDA(BNF)
(PROG (I J N !WORRYFLG L)
(SETQ I 0)
(FOR X (IN BNF) (DO (PROG NIL (SETQ I (ADD1 I)) (STORE (ORDNAM I) X))))
(SETQ N I)
L1 (SETQ !WORRYFLG NIL)
(FOR I
(STEP 1 1 N)
(DO
(STORE (ORDLST I)
(FOR J
(STEP 1 1 N)
(COLLECT J)
(UNLESS
(OR (EQ I J)
(NULL (ORDNAM J))
(NOT (SPCS (MKRITE (ORDNAM I)) (MKRITE (ORDNAM J)) NIL)))))))
(UNLESS (NULL (ORDNAM I))))
(FOR I (STEP 1 1 N) (DO (STORE (ORDNUM I) 0)))
(FOR I (STEP 1 1 N) (DO (FOR J (IN (ORDLST I)) (DO (STORE (ORDNUM J) -1)))))
(FOR I (STEP 1 1 N) (UNLESS (NOT (ZEROP (ORDNUM I)))) (DO (ORDTST2 (ORDLST I) (NCONS I) 1)))
(WORRY (FOR I (STEP 1 1 N) (COLLECT I) (UNLESS (NOT (EQUAL (ORDNUM I) -1)))))
(COND (!WORRYFLG (GO L1)))
(SETQ L NIL)
(FOR D
(STEP N -1 0)
(DO
(FOR I
(STEP N -1 1)
(DO (COND ((AND (EQ (ORDNUM I) D) (ORDNAM I)) (SETQ L (CONS (ORDNAM I) L))))))))
(RETURN L)))
EXPR)
(DEFPROP ORDTST2
(LAMBDA(L PATH N)
(FOR X
(IN L)
(DO
(PROG2 (COND ((MEMQ X PATH) (WORRY PATH)) ((LESSP (ORDNUM X) N) (STORE (ORDNUM X) N)))
(ORDTST2 (ORDLST X) (CONS X PATH) (ADD1 N))))))
EXPR)
(DEFPROP WORRY
(LAMBDA(L)
(PROG NIL
(COND ((NULL L) (RETURN NIL)))
(TTYPRINT (CONS !RULE (QUOTE (HAS OUTPUT AMBIGUITY; YOUR CHOICES ARE:))))
(FOR I (IN L) (DO (PROG2 (TTYPRINT I) (TTYPRIN1 (CAR (ORDNAM I))))))
(TTYPRINT (QUOTE (TYPE LIST OF NUMBERS OF LINES TO DELETE)))
(FOR I (IN (READ)) (DO (STORE (ORDNAM I) NIL)))
(SETQ !WORRYFLG T)))
EXPR)
(DEFPROP TTYPRINT
(LAMBDA (X) (PROG (C) (SETQ C (OUTC NIL NIL)) (PRINT X) (OUTC C NIL)))
EXPR)
(DEFPROP TTYPRIN1
(LAMBDA (X) (PROG (C) (SETQ C (OUTC NIL NIL)) (PRIN1 X) (OUTC C NIL)))
EXPR)
(DEFPROP MKRITE
(LAMBDA (L) (COND ((EQ (CADR L) (QUOTE *)) (GETATOM (CAR L))) (T (CADR L))))
EXPR)
(DEFPROP TST
(LAMBDA (F X) (PROG2 (SETQ %SPDL (LIST X)) (F 0)))
EXPR)
(DEFPROP VARIABLE
(LAMBDA (X) (COND ((NUMBERP X) NIL) ((GET X (QUOTE BNF))) ((MEMQ X (QUOTE (ID NUMBER ATOM CHAR))))))
EXPR)
(DEFPROP SPCS
(LAMBDA(X Y PATH)
(COND ((EQ X Y))
((NULL X))
((AND (MEMQ Y (QUOTE (ID NUMBER ATOM))) (NOT (VARIABLE X))))
((AND (ATOM Y) (VARIABLE Y) (NOT (MEMQ Y PATH)))
(PROG (BNF)
(SETQ BNF (GET Y (QUOTE BNF)))
L (COND ((NULL BNF) (RETURN NIL))
((SPCS X (MKRITE (CAR BNF)) (CONS Y PATH)) (RETURN T))
(T (SETQ BNF (CDR BNF)) (GO L)))))
((AND (NOT (ATOM Y)) (NOT (ATOM X)) (SPCS (CAR X) (CAR Y) NIL) (SPCS (CDR X) (CDR Y) NIL)))))
EXPR)
(DEFPROP CONSTLST
(NIL T 0 1)
VALUE)
(DEFPROP TST2
(LAMBDA (L) (MAPC (FUNCTION TST3) L))
EXPR)
(DEFPROP TST3
(LAMBDA(R)
(PROG (!BNF A B C)
(PRINT R)
(SETQ !BNF (GET R (QUOTE BNF)))
(MAPC (FUNCTION
(LAMBDA(!X)
(MAPC (FUNCTION
(LAMBDA(Y)
(COND ((EQ (CADR !X) (CADR Y)))
((SPCS (CADR !X) (CADR Y) NIL) (TERPRI)
(TYO 11)
(PRIN1 (CADR !X))
(TYO 11)
(PRIN1 (MKRITE Y))))))
!BNF)))
!BNF)))
EXPR)
(DEFPROP OTA
(LAMBDA(L)
(FOR RULE
(IN L)
(DO
(PROG (Y)
(TERPRI)
(TERPRI)
(PRINT RULE)
(SETQ Y (OUTORDER (GET RULE (QUOTE BNF))))
(OT1 (LENGTH (GET RULE (QUOTE BNF))))
(TERPRI)
(OT2 Y)))))
EXPR)
(DEFPROP OT1
(LAMBDA(N)
(FOR I
(STEP 1 1 N)
(UNLESS (NULL (ORDNAM I)))
(DO (PROG2 (PRINT I) (PRIN1 (LIST (ORDNUM I) (ORDLST I) (MKRITE (ORDNAM I))))))))
EXPR)
(DEFPROP OT2
(LAMBDA (L) (FOR X (IN L) (DO (PRINT (MKRITE X)))))
EXPR)
(DEFPROP MKMATCH
(LAMBDA(SEM)
(COND ((AND (ATOM SEM) (MEMQ SEM !BNF)) (QUOTE *))
((ATOM SEM) SEM)
(T (CONS (MKMATCH (CAR SEM)) (MKMATCH (CDR SEM))))))
EXPR)
(DEFPROP MAGPRE
(LAMBDA (X) X)
EXPR)
(DEFPROP STKLST
(NIL (0 STK0) (1 STK1) (2 STK2) (3 STK3) (4 STK4) (5 STK5) (6 STK6) (7 STK7))
VALUE)
(DEFPROP MKBLD2
(LAMBDA(X)
(COND ((AND (ATOM X) (NULL !ASSLST)) (QUOTE (STK1)))
((ATOM X) (CDR (ASSOC (CDR (ASSOC X !ASSLST)) STKLST)))
((MEMQ (CAR X) (QUOTE (CH QCH))) (LIST (QUOTE QUOTE) (CONS (QUOTE :CH) (CDR X))))
(T (LIST (QUOTE QUOTE) (CADR X)))))
EXPR)
(DEFPROP MKBLD
(LAMBDA(BNF)
(COND ((NULL BNF) (QUOTE FOOBAZ))
((NULL (CDR BNF)) (MKBLD2 (CAR BNF)))
(T (CONS (QUOTE LIST) (MAPCAR (FUNCTION MKBLD2) BNF)))))
EXPR)
(DEFPROP OUTMAK1
(LAMBDA(!BNF SEM)
(PROG (!ASSLST)
(RETURN
(LIST (COND ((EQ SEM (QUOTE *)) (LIST (SQBROK (GETATOM !BNF)) 1))
((AND (ATOM SEM) (MEMQ SEM !BNF)) (LIST (SQBROK SEM) 1))
((ATOM SEM) (LIST (QUOTE EQ) (LIST (QUOTE QUOTE) SEM) (QUOTE (STK1))))
(T
(CONS (QUOTE AND)
(CONS (LIST (QUOTE MATCH) (LIST (QUOTE QUOTE) (MKMATCH SEM))) (MKTST SEM)))))
(MKBLD !BNF)))))
EXPR)
(DEFPROP MKTST2
(LAMBDA(SEM)
(COND ((NULL SEM))
((AND (ATOM SEM) (MEMQ SEM !BNF)) (SETQ !TSTLST (CONS (LIST (SQBROK SEM) !STKLOC) !TSTLST))
(SETQ !ASSLST (CONS (CONS SEM !STKLOC) !ASSLST))
(SETQ !STKLOC (ADD1 !STKLOC)))
((ATOM SEM))
(T (MKTST2 (CDR SEM)) (MKTST2 (CAR SEM)))))
EXPR)
(DEFPROP MKTST
(LAMBDA (SEM) (PROG (!TSTLST !STKLOC) (SETQ !STKLOC 0) (MKTST2 SEM) (RETURN !TSTLST)))
EXPR)
(DEFPROP MAKOUTRULE
(LAMBDA(BNF !RULE)
(PUTPROP !RULE
(LIST (QUOTE LAMBDA)
(QUOTE (%N))
(LIST (QUOTE OUTRUL)
(QUOTE %N)
(LIST (QUOTE FUNCTION)
(LIST (QUOTE LAMBDA)
NIL
(CONS (QUOTE COND)
(MAGPRE (MAPCAR (FUNCTION OUTMAKE) (OUTORDER (CADR BNF)))))))))
(QUOTE EXPR)))
EXPR)
(DEFPROP OUTMAKE
(LAMBDA (L) (OUTMAK1 (CAR L) (CADR L)))
EXPR)
(DEFPROP MKOP
(LAMBDA (OP L) (COND ((NULL L)) ((NULL (CDR L)) (CAR L)) (T (CONS OP L))))
EXPR)